// Copyright 2021 Tencent Inc. All rights reserved.
//
// 商家转账对外API（2025年1月15日升级版本）
//
// 发起转账
// [https://pay.weixin.qq.com/doc/v3/merchant/4012716434](https://pay.weixin.qq.com/doc/v3/merchant/4012716434)
// 商家转账用户确认模式下，用户申请收款时，商户可通过此接口申请创建转账单
// 接口返回的HTTP状态码及错误码，仅代表本次请求的结果，不能代表订单状态。
// 接口返回的HTTP状态码为200，且状态为WAIT_USER_CONFIRM时，可认为创建转账单成功，可引导用户确认收款。其余状态请参考开发指引中的状态机描述进行处理。
// 接口返回的HTTP状态码不为200时，请商户务必不要立即更换商户订单号重试。可根据错误码列表中的描述和接口返回的信息进行处理，并在查询原订单结果为失败或者联系客服确认情况后，再更换商户订单号进行重试。否则会有重复转账的资金风险。
// 注：单个商户的接口频率限制为100次/s
//
// API version: 1.0.0

// Code generated by WechatPay APIv3 Generator based on [OpenAPI
// Generator](https://openapi-generator.tech); DO NOT EDIT.

package com.wechat.pay.java.service.mchtransfer.model;

import com.google.gson.annotations.SerializedName;

import static com.wechat.pay.java.core.util.StringUtil.toIndentedString;

/** InitiateMchTransferResponse */
public class InitiateMchTransferResponse {
    /** 【商户单号】 商户系统内部的商家单号，要求此参数只能由数字、大小写字母组成，在商户系统内部唯一 */
    @SerializedName("out_bill_no")
    private String outBillNo;

    /** 【微信转账单号】 微信转账单号，微信商家转账系统返回的唯一标识 */
    @SerializedName("transfer_bill_no")
    private String transferBillNo;

    /** 单据创建时间】 单据受理成功时返回，按照使用rfc3339所定义的格式，格式为yyyy-MM-DDThh:mm:ss+TIMEZONE */
    @SerializedName("create_time")
    private String createTime;

    /**
     * 【单据状态】 商家转账订单状态
     *
     * <ul>
     *   <li>ACCEPTED: 转账已受理
     *   <li>PROCESSING: 转账锁定资金中。如果一直停留在该状态，建议检查账户余额是否足够，如余额不足，可充值后再原单重试。
     *   <li>WAIT_USER_CONFIRM: 待收款用户确认，可拉起微信收款确认页面进行收款确认
     *   <li>TRANSFERING: 转账中，可拉起微信收款确认页面再次重试确认收款
     *   <li>SUCCESS: 转账成功
     *   <li>FAIL: 转账失败
     *   <li>CANCELING: 商户撤销请求受理成功，该笔转账正在撤销中
     *   <li>CANCELLED: 转账撤销完成
     * </ul>
     */
    @SerializedName("state")
    private String state;

    /**
     * 【跳转领取页面的package信息】 跳转微信支付收款页的package信息， <a
     * href="https://pay.weixin.qq.com/doc/v3/merchant/4012719576">APP调起用户确认收款</a>或者 <a
     * href="https://pay.weixin.qq.com/doc/v3/merchant/4012716430">JSAPI调起用户确认收款</a>时需要使用的参数。<br>
     * 单据创建后，用户24小时内不领取将过期关闭，建议拉起用户确认收款页面前，先查单据状态：如单据状态为待收款用户确认，可用之前的package信息拉起；单据到终态时需更换单号重新发起转账。
     */
    @SerializedName("package_info")
    private String packageInfo;

    public String getOutBillNo() {
        return outBillNo;
    }

    public InitiateMchTransferResponse setOutBillNo(String outBillNo) {
        this.outBillNo = outBillNo;
        return this;
    }

    public String getTransferBillNo() {
        return transferBillNo;
    }

    public InitiateMchTransferResponse setTransferBillNo(String transferBillNo) {
        this.transferBillNo = transferBillNo;
        return this;
    }

    public String getCreateTime() {
        return createTime;
    }

    public InitiateMchTransferResponse setCreateTime(String createTime) {
        this.createTime = createTime;
        return this;
    }

    public String getState() {
        return state;
    }

    public InitiateMchTransferResponse setState(String state) {
        this.state = state;
        return this;
    }

    public String getPackageInfo() {
        return packageInfo;
    }

    public InitiateMchTransferResponse setPackageInfo(String packageInfo) {
        this.packageInfo = packageInfo;
        return this;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("class InitiateMchTransferResponse {\n");
        sb.append("    outBillNo: ").append(toIndentedString(outBillNo)).append("\n");
        sb.append("    transferBillNo: ").append(toIndentedString(transferBillNo)).append("\n");
        sb.append("    createTime: ").append(toIndentedString(createTime)).append("\n");
        sb.append("    state: ").append(toIndentedString(state)).append("\n");
        sb.append("    packageInfo: ").append(toIndentedString(packageInfo)).append("\n");
        sb.append("}");
        return sb.toString();
    }
}